ホームに戻る
関連 :
ウィンドウ起動~終了時のイベント
目次 :

ウィンドウが閉じるのをキャンセルする

×ボタン押下や Close() 呼び出しでウィンドウを閉じる際、Closing ハンドラ中で CancelEventArgs.Cancel = true とすることでウィンドウが閉じるのをキャンセルできる。

詳細

リンク先を併せて参照のこと。
×ボタンを押下した場合は Close() が暗黙的に呼び出され、それを受けて Closing イベントが発生する。
( Close() を明示的に呼び出した場合も同様。)
その際にイベント引数( CancelEventArgs )が渡されるが、Closing ハンドラが CancelEventArgs.Cancel == false のまま終了するとウィンドウが閉じられる。
逆に CancelEventArgs.Cancel == true とすることでウィンドウが閉じるのを阻止することができる。

実装例

public partial class MainWindow : Window { : /// <summary> /// ウィンドウが閉じられる直前の処理 /// </summary> private void Window_Closing( object sender, System.ComponentModel.CancelEventArgs e ) { // 問い合わせ表示 // 「はい」押下時以外はウィンドウ閉をキャンセル // ( e.Cancel に true をセット) e.Cancel = Util.MessageBoxFunc.ShowYesNoMsgBox( "終了しますか?" ) != Util.MessageBoxFunc.E_Result.Yes; } /// <summary> /// 「終了」ボタンクリック時の処理 /// </summary> private void Button_Click_Exit( object sender, RoutedEventArgs e ) { // ウィンドウを閉じる Close(); } }
処理の流れ :
  1. 「終了」ボタンが押下される
  2. 「終了」ボタンのクリックハンドラ中で Close() が呼ばれる
  3. ウィンドウの Closing イベントが発生する
  4. Closing イベントハンドラ中で e.Cancel = true とするとウィンドウが閉じるのがキャンセルされる